package fragments;

import java.util.ArrayList;

import webService.AccesoWebService;

import com.androidmodule.onthego.R;

import entidades.PromocionComun;
import activities.ActivityPromocionComun;
import activities.ActivityPromocionesComunes.hiloPromocionesComunes;
import adaptadores.AdaptadorPromocionesComunes;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.ListFragment;
import android.view.View;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class ListaPromocionesComunesFragment extends ListFragment{
	boolean mDualPane;
    int mCurCheckPosition = 0;
    private AdaptadorPromocionesComunes promocionesComunesAdaptador;
    private ProgressBar progresoPromocionesComunes;
	protected TextView textoListaVacia;
	private hiloPromocionesComunes hiloBuscaPromociones;
    
    public void onActivityCreated(Bundle savedInstanceState) {
    	 super.onActivityCreated(savedInstanceState);
    	 promocionesComunesAdaptador = new AdaptadorPromocionesComunes(this.getActivity().getApplicationContext());
    	 progresoPromocionesComunes = (ProgressBar) this.getActivity().findViewById(R.id.progressBarPromocionComun);
 		 textoListaVacia = (TextView) this.getActivity().findViewById(android.R.id.empty);
 		 hiloBuscaPromociones = new hiloPromocionesComunes();
    	 setListAdapter(promocionesComunesAdaptador);
    	 buscarPromociones();
    	 
    	// Check to see if we have a frame in which to embed the details
        // fragment directly in the containing UI.
        //View detailsFrame = getActivity().findViewById(R.id.marcoDetallesPromociones);
        // mDualPane = detailsFrame != null && detailsFrame.getVisibility() == View.VISIBLE;
         
         if (savedInstanceState != null) {
             // Restore last state for checked position.
             mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
         }
         /*
         if (mDualPane) {
             // In dual-pane mode, the list view highlights the selected item.
             getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
             // Make sure our UI is in the correct state.
             //showDetails(mCurCheckPosition);
         }
    	 */
    	
    }
    
    public void setSingleChoiceMode(boolean mDualPane){
    	if(mDualPane)
    		 getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    	else
    		getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    	
    }
    
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("curChoice", mCurCheckPosition);
    }
    
    void showDetails(int index) {
        mCurCheckPosition = index;
       /*
        if (mDualPane) {
            // We can display everything in-place with fragments, so update
            // the list to highlight the selected item and show the data.
            getListView().setItemChecked(index, true);

            // Check what fragment is currently shown, replace if needed.
            PromocionComunFragment details = (PromocionComunFragment)
                    getFragmentManager().findFragmentById(R.id.marcoDetallesPromociones);
            if (details == null || details.getShownIndex() != index) {
                // Make new fragment to show this selection.
                details = PromocionComunFragment.newInstance(index);

                // Execute a transaction, replacing any existing fragment
                // with this one inside the frame.
                FragmentTransaction ft = getFragmentManager().beginTransaction();
                if (index == 0) {
                    ft.replace(R.id.details, details);
                } else {
                    ft.replace(R.id.a_item, details);
                }
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.commit();
            }
    
        } else {
            // Otherwise we need to launch a new activity to display
            // the dialog fragment with selected text.
            Intent intent = new Intent();
            intent.setClass(getActivity(), ActivityPromocionComun.class);
            intent.putExtra("index", index);
            startActivity(intent);
        }
        */
    }
    
    
    
    
    
    /**
	 * Recibe como parametro  un ArrayList con las promociones Comunes obtenidas del servidor
	 * y las carga en la lista del adaptador
	 * @param promocionesWebService
	 * no tiene retorno
	 */
	public void cargarPromocionesComunes( ArrayList<PromocionComun> promocionesWebService) {
		this.promocionesComunesAdaptador.limpiar();
        for(PromocionComun promocion:promocionesWebService){
            this.promocionesComunesAdaptador.agregarPromocionComun(promocion);
            this.promocionesComunesAdaptador.notifyDataSetChanged();
        }
    }
		
	/**
	 * Metodo que comprueba si el dispositivo esta conectado a una red WIFI
	 * @return true si esta conectgado, false si no
	 */
	public boolean isOnline() {
		ConnectivityManager cManager = (ConnectivityManager) this.getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo netInfo = cManager.getActiveNetworkInfo();
		if (netInfo != null && netInfo.isConnectedOrConnecting()) {
		    return true;
		}
		return false;
	}
	
	/**
	 * Metodo que encapsula la funcionalidad asociada con la busqueda de promociones
	 */
	public void buscarPromociones(){
		if(isOnline()){
			progresoPromocionesComunes.setVisibility(ProgressBar.VISIBLE);
			textoListaVacia.setText(R.string.lista_buscandoPromociones);			
		    hiloBuscaPromociones.execute();
		   
		}
		else{
			textoListaVacia.setText(getString(R.string.lista_sinConexion));
		}
	}
	
	/**
	 * Clase interna, es el hilo que busca las promociones comunes en el servidor
	 * @author Marco
	 *
	 */
	public class hiloPromocionesComunes extends AsyncTask<Void, Integer, ArrayList<PromocionComun>> {
        String mensajeError ="";
        ArrayList<PromocionComun> promocionesWebService;
        
        public hiloPromocionesComunes(){
            promocionesWebService = new ArrayList<PromocionComun>();
        }

        @Override
        protected ArrayList<PromocionComun> doInBackground(Void... params) { 
            try{
    	        AccesoWebService accesoWeb = new AccesoWebService();
    	        promocionesWebService = accesoWeb.getPromocionesComunes();
            }
            catch (java.net.SocketTimeoutException timeOut){
           	    mensajeError =  getString(R.string.mensaje_sinAccesoServidor);
            }
           
            return promocionesWebService;
        }

        protected void onProgressUpdate(Integer... values){
    
        }
        
       protected void onPostExecute(ArrayList<PromocionComun> promociones){
           if(!"".equals(mensajeError)){
       	       textoListaVacia.setText(getString(R.string.mensaje_sinAccesoServidor));
           }    
           else{
        	   if(promociones.size()>0)
                   cargarPromocionesComunes(promociones);
        	   else
        		   textoListaVacia.setText(getString(R.string.lista_sinPromocionesComunes));
           }
           progresoPromocionesComunes.setVisibility(ProgressBar.GONE);
       } 
	}
    
    
    
    public interface OnPromocionSeleccionadaListener {
    	public void onPromocionSeleccionadaListener(String idPromocionComun);
    }
    

}
